var util = require('../util'),
  weixinuserDao = require('../db/daos/weixinuser');

/**
 * 获取vpn点击后系统回复用户的消息
 * @param message 从微信xml信息中得到的数据对象
 * @returns {Promise.<{action_type: string:{click_vpn}, msg: *}>}
 */
function getVpnMsg(message) {

  // 取得用户信息
  return weixinuserDao.findByOpenId(message.FromUserName).then(function (userInfo) {

    // 计算剩余日
    var dates = Math.floor((userInfo.due_date - Date.now()) / (1000 * 3600 * 24));
    var msgFragment ='';

    // 未注册
    if (userInfo.due_date == 0) {
      msgFragment = '\
你还没有注册哦, 输入edu邮箱完成注册\r\n'
    } else if (dates < 0) {

    // 过期MSG
    msgFragment = '\
您的免费试用期已过\r\n'
    } else {
      var allocatedVpn = getVpnHost(userInfo.openid);

      // vpn分配成功
      if (allocatedVpn && allocatedVpn.host &&  allocatedVpn.pwd) {
        msgFragment =  '今日可用vpn为：\r\n\
  服务器：' + allocatedVpn.host + '\r\n\
  密码：' + allocatedVpn.pwd + '\r\n\
  您还能免费使用' + dates + '天\r\n';
      } else {

        // vpn分配失败
        msgFragment =  'Oh, NO~~ 暂时没有可用的vpn, 请稍后再试\r\n';
      }
    }

    // 取得server ip / pwd
    var description = '↑↑↑ 点击获取推广码 ↑↑↑\r\n\
  ' + userInfo.nickname +', 您好！\r\n\
  ' + msgFragment + '\
  请扩散您的推广码, 延长使用时间\r\n';

    var item = util.weixin.getNewsItem('今日VPN', description, userInfo.qrcode, userInfo.qrcode);
    var msg = util.weixin.getNewsMsg(message.ToUserName, message.FromUserName, new Array(item));

    // 拼接并返回消息
    return Promise.resolve({
      action_type: 'click_vpn',
      msg: msg
    });
  }).catch(util.log.log2Error);
}

/**
 * 获取VPN server 并发送消息给util.vpnserver
 * @param openid 成功获得vpn地址和密码的openid
 * @returns {*} vpn的mongo对象
 * @see {@link util.vpnserver#getVpn}
 * @see {@link sandbox.MSG.VPN_ASSIGNED}
 */
function getVpnHost (openid) {
  var vpn = util.vpnserver.getVpn(openid);
  if (vpn) util.sandbox.emit(util.sandbox.MSG.VPN_ASSIGNED, {host: vpn.host, openid: openid});
  return vpn;
}
module.exports.getVpnMsg = getVpnMsg;